<!-- HTML header for doxygen 1.8.11-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>i2cpwm_board: Services interfaces provided by this package</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="styles.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <a href="./index.html"><div id="projectname">i2cpwm_board
   &#160;<span id="projectnumber">0.5.1</span>
   </div></a>
   <div id="projectbrief">ROS Package for PCA9685 based 16 channel PWM Board with I2C Interface</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">Services interfaces provided by this package</div>  </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga948cb0dd7ba8c2ac4c7f2d2d93940d85"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___services.html#ga948cb0dd7ba8c2ac4c7f2d2d93940d85">set_pwm_frequency</a> (i2cpwm_board::IntValue::Request &amp;req, i2cpwm_board::IntValue::Response &amp;res)</td></tr>
<tr class="memdesc:ga948cb0dd7ba8c2ac4c7f2d2d93940d85"><td class="mdescLeft">&#160;</td><td class="mdescRight">service to set set PWM frequency  <a href="#ga948cb0dd7ba8c2ac4c7f2d2d93940d85">More...</a><br /></td></tr>
<tr class="separator:ga948cb0dd7ba8c2ac4c7f2d2d93940d85"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gabf512716d4497c6a4cb7bf9c5d94e2f1"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___services.html#gabf512716d4497c6a4cb7bf9c5d94e2f1">config_servos</a> (i2cpwm_board::ServosConfig::Request &amp;req, i2cpwm_board::ServosConfig::Response &amp;res)</td></tr>
<tr class="memdesc:gabf512716d4497c6a4cb7bf9c5d94e2f1"><td class="mdescLeft">&#160;</td><td class="mdescRight">store configuration data for servos on the active board  <a href="#gabf512716d4497c6a4cb7bf9c5d94e2f1">More...</a><br /></td></tr>
<tr class="separator:gabf512716d4497c6a4cb7bf9c5d94e2f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae3222f92a0cd33b0d0a2fcfd6d563ba9"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___services.html#gae3222f92a0cd33b0d0a2fcfd6d563ba9">config_drive_mode</a> (i2cpwm_board::DriveMode::Request &amp;req, i2cpwm_board::DriveMode::Response &amp;res)</td></tr>
<tr class="memdesc:gae3222f92a0cd33b0d0a2fcfd6d563ba9"><td class="mdescLeft">&#160;</td><td class="mdescRight">set drive mode and drive servos  <a href="#gae3222f92a0cd33b0d0a2fcfd6d563ba9">More...</a><br /></td></tr>
<tr class="separator:gae3222f92a0cd33b0d0a2fcfd6d563ba9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4583b417d172bde68e75db603da3362e"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___services.html#ga4583b417d172bde68e75db603da3362e">stop_servos</a> (std_srvs::Empty::Request &amp;req, std_srvs::Empty::Response &amp;res)</td></tr>
<tr class="memdesc:ga4583b417d172bde68e75db603da3362e"><td class="mdescLeft">&#160;</td><td class="mdescRight">service to stop all servos on all boards  <a href="#ga4583b417d172bde68e75db603da3362e">More...</a><br /></td></tr>
<tr class="separator:ga4583b417d172bde68e75db603da3362e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="ga948cb0dd7ba8c2ac4c7f2d2d93940d85"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool set_pwm_frequency </td>
          <td>(</td>
          <td class="paramtype">i2cpwm_board::IntValue::Request &amp;&#160;</td>
          <td class="paramname"><em>req</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">i2cpwm_board::IntValue::Response &amp;&#160;</td>
          <td class="paramname"><em>res</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p><code>#include &lt;<a class="el" href="i2cpwm__controller_8cpp.html">src/i2cpwm_controller.cpp</a>&gt;</code></p>

<p>service to set set PWM frequency </p>
<p>The PWM boards drive LED and servos using pulse width modulation. The 12 bit interface means values are 0..4096. The size of the minimum width is determined by the frequency. is service is needed when using a board configured other than with the default I2C address and when using multiple boards.</p>
<p>If using the set_active_board() service, it must be used before using other services or topics from this package.</p>
<p><b>Warning:</b> Changing the frequency will affect any active servos.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">req</td><td>an Int16 value for the requested pulse frequency </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">res</td><td>the return value will be the new active frequency </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>true</dd></dl>
<p><b>i2cpwm_board::IntValue</b> </p><div class="fragment"><div class="line"># there are a few services whic take a single integer as input</div><div class="line"># these services share the IntValue service definition</div><div class="line"></div><div class="line">int16 value</div><div class="line">---</div><div class="line">int16 error</div><div class="line"></div></div><!-- fragment --><p><b>Example</b> </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;# Analog RC servos are most often designed for 20ms pulses. This is achieved with a frequency of 50Hz.</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;# This software defaults to 50Hz. Use the set_pwm_frequncy() to change this frequency value. </div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;# It may be necessary or convenient to change the PWM frequency if using DC motors connected to PWM controllers. </div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;# It may also be convenient if using PWM to control LEDs.</div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;</div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;rosservice call /set_pwm_frequency &quot;{value: 50}&quot;</div></div><!-- fragment --> 
<p>Definition at line <a class="el" href="i2cpwm__controller_8cpp_source.html#l01172">1172</a> of file <a class="el" href="i2cpwm__controller_8cpp_source.html">i2cpwm_controller.cpp</a>.</p>

</div>
</div>
<a class="anchor" id="gabf512716d4497c6a4cb7bf9c5d94e2f1"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool config_servos </td>
          <td>(</td>
          <td class="paramtype">i2cpwm_board::ServosConfig::Request &amp;&#160;</td>
          <td class="paramname"><em>req</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">i2cpwm_board::ServosConfig::Response &amp;&#160;</td>
          <td class="paramname"><em>res</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p><code>#include &lt;<a class="el" href="i2cpwm__controller_8cpp.html">src/i2cpwm_controller.cpp</a>&gt;</code></p>

<p>store configuration data for servos on the active board </p>
<p>A service to set each servo's center value, direction of rotation (1 for forward and -1 for reverse motion), the center or nul value, range, and direction of one or more servos. and range between full left and right or maximun forward and backward speed.</p>
<p>Setting these data are required before sending messages to the <a class="el" href="group___topics.html#ga1262b2e51072c237c51b6de4cb199e53" title="subscriber topic to move servos in the range of ±1.0 ">servos_proportional()</a> topic as well as the <a class="el" href="group___topics.html#gae257665eb64139d2720ed332e61507c6" title="subscriber topic to move servos based on a drive mode ">servos_drive()</a> topic.</p>
<p>If more than one PWM board is present, the set_active_board() service is used to switch between boards prior to configuring servos.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">req</td><td>an array of 'ServoConfig' which consists of a servo number (one based), center(0..4096), range(0..4096), and direction (±1). </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">res</td><td>integer non-zero if an error occured </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>true</dd></dl>
<p><b>i2cpwm_board::ServosConfig</b> </p><div class="fragment"><div class="line"># the servos_config service is used to assign useful configuration data to servos</div><div class="line"># the tollerance of electronis varies in RC servos so it is important to calibate</div><div class="line"># each servo, indicating its PWM value for direction of rotation, centering, and</div><div class="line"># range which is used to scale servo motion a standard ±1000 scale</div><div class="line"></div><div class="line">ServoConfig[] servos</div><div class="line">---</div><div class="line">int16 error</div></div><!-- fragment --><p> <b>i2cpwm_board::ServoConfig</b> </p><div class="fragment"><div class="line"># the ServoConfig message is used to assign specific configuration</div><div class="line"># data to a servo. the data is needed to normalize servos to</div><div class="line"># common values to isolate variations from the rest of the user&#39;s</div><div class="line"># robot motion code. </div><div class="line"></div><div class="line">int16 servo</div><div class="line">int16 center</div><div class="line">int16 range</div><div class="line">int16 direction</div></div><!-- fragment --><p><b>Example</b> </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;# this example makes the following assumptions about the hardware</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;# the servos have been connected to the PWM board starting with the first connector and proceeding in order</div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;# any drive servos used for the left side servos are mounted opposite of those for the right side</div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;</div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;# this example uses 2 servos</div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;# the first servo is the left and the second servo is the right</div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;# configure two continuous rotation servos associated with the drive system - these servos were determined to have a ragee of ±50</div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;</div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;rosservice call /config_servos &quot;servos: [{servo: 1, center: 333, range: 100, direction: -1}, \</div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;                                         {servo: 2, center: 336, range: 108, direction: 1}]&quot;</div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;# additionally configure one 180 degree servo (±90) used for a robot arm - this servo was determine to have a ragee of ±188</div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;rosservice call /config_servos &quot;servos: [{servo: 9, center: 344, range: 376, direction: -1}]&quot; </div></div><!-- fragment --> 
<p>Definition at line <a class="el" href="i2cpwm__controller_8cpp_source.html#l01228">1228</a> of file <a class="el" href="i2cpwm__controller_8cpp_source.html">i2cpwm_controller.cpp</a>.</p>

</div>
</div>
<a class="anchor" id="gae3222f92a0cd33b0d0a2fcfd6d563ba9"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool config_drive_mode </td>
          <td>(</td>
          <td class="paramtype">i2cpwm_board::DriveMode::Request &amp;&#160;</td>
          <td class="paramname"><em>req</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">i2cpwm_board::DriveMode::Response &amp;&#160;</td>
          <td class="paramname"><em>res</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p><code>#include &lt;<a class="el" href="i2cpwm__controller_8cpp.html">src/i2cpwm_controller.cpp</a>&gt;</code></p>

<p>set drive mode and drive servos </p>
<p>A service to set the desired drive mode. It must be called before messages are handled by the <a class="el" href="group___topics.html#gae257665eb64139d2720ed332e61507c6" title="subscriber topic to move servos based on a drive mode ">servos_drive()</a> topic. Setting these data are required before sending messages to the <a class="el" href="group___topics.html#ga1262b2e51072c237c51b6de4cb199e53" title="subscriber topic to move servos in the range of ±1.0 ">servos_proportional()</a> topic.</p>
<p>The drive mode consists of a string value for the type of drive desired: ackerman, differential, or mecanum. For each mode, the drive servos must be specified.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">req</td><td>[in] DriveMode configuration data </td></tr>
    <tr><td class="paramname">res</td><td>[out] non-zero on error </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>true</dd></dl>
<p>The DriveMode input requires drive system details included: wheel RPM, wheel radius, and track width. ROS uses meters for measurements. The values of radius and track are expected in meters.</p>
<p><em>A scale factor is available if necessary to compensate for linear vector values.</em></p>
<p>The mode string is one of the following drive systems:</p><ol type="1">
<li>'ackerman' - (automobile steering) requires minimum of one servo for drive and uses some other servo for stearing..</li>
<li>'differential' - requires multiples of two servos, designated as left and right.</li>
<li>'mecanum' - requires multiples of four servos, designated as left-front, right-front, left-rear, and right-rear.</li>
</ol>
<p>The servo message is used for indicating which servos are used for the drive system. The message consists of 'servo' number, and data 'value'.</p>
<p>The 'value' field indicates the positon the corresponding servo within the drive system. The applicable servos are assigned positions as follows:</p>
<table class="doxtable">
<tr>
<th>positon </th><th>ackerman </th><th>differential </th><th>mecanum  </th></tr>
<tr>
<td>position 1 corresponds to </td><td>drive </td><td>left </td><td>left-front </td></tr>
<tr>
<td>position 2 corresponds to </td><td></td><td>right </td><td>right-front </td></tr>
<tr>
<td>position 3 corresponds to </td><td></td><td></td><td>left-rear </td></tr>
<tr>
<td>position 4 corresponds to </td><td></td><td></td><td>right-rear </td></tr>
</table>
<p><b>i2cpwm_board::DriveMode</b> </p><div class="fragment"><div class="line"># the drive_mode service is used to assigned servos to various drive modes</div><div class="line"># the drive modes determine how the assigned servos respond to geometry_msgs::Twist messages</div><div class="line"># drive modes are one of: ackerman, differential, or mecanum</div><div class="line"># to accurately convert velocity in m/s the controller needs to know three values:</div><div class="line">#   the RPM    - the maximum output speed available from the drive motors</div><div class="line">#   the radius - the drive wheel radius in meters</div><div class="line">#   the track  - the distance between the left and right wheels in meters</div><div class="line"># use the scale value to adjust incoming Twist values as needed to match the servo/motor capability</div><div class="line"></div><div class="line"></div><div class="line">string mode</div><div class="line">float32 rpm</div><div class="line">float32 radius</div><div class="line">float32 track</div><div class="line">float32 scale</div><div class="line">Position[] servos</div><div class="line">---</div><div class="line">int16 error</div></div><!-- fragment --><p> <b>i2cpwm_board::Position</b> </p><div class="fragment"><div class="line"># the position message is used when configuring drive mode to</div><div class="line"># assign a  servo to a specific wheel positon in the drive system</div><div class="line"># postions are specific toe the desired drive mode</div><div class="line"># ackerman has only one position</div><div class="line"># 1 = drive</div><div class="line"># differential has two positons</div><div class="line"># 1 = left, 2 = right</div><div class="line"># mecanum has four positions</div><div class="line"># 1 = front left, 2 = front right, 3 = rear left, 4 = rear right</div><div class="line"># multiple servos/motors may be used for each positon</div><div class="line"></div><div class="line">int16 servo</div><div class="line">int16 position</div></div><!-- fragment --><p><b>Example</b> </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;# this example makes the following assumptions about the hardware</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;# the servos have been connected to the PWM board starting with the first connector and proceeding in order</div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;# any drive servos used for the left side servos are mounted opposite of those for the right side</div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;</div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;# ROS used m/s (meters per second) as th standard unit for velocity.</div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;# The geometry_msgs::Twist linear and angular vectors are in m/s and radians/s respectively.</div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;# differential drive example</div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;# this example uses 2 servos</div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;# the first servo is the left and the second servo is the right</div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;</div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;rosservice call /config_drive_mode &quot;{mode: differential, rpm: 56.0, radius: 0.0055, track: 0.015, scale: 1.0, \</div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;                                     servos: [{servo: 1, value: 1}, {servo: 2, value: 2}]}&quot;</div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;# this example uses 4 servos</div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;# there are two servos for the left and two  fors the right</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;rosservice call /config_drive_mode &quot;{mode: differential, rpm: 56.0, radius: 0.0055, track: 0.015, scale: 1.0, \</div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;                                     servos: [{servo: 1, value: 1}, {servo: 2, value: 2}, \</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;                                              {servo: 3, value: 1}, {servo: 4, value: 2}]}&quot;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;# mecanum drive example</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;# this example uses 4 servos</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;rosservice call /config_drive_mode &quot;{mode: differential, rpm: 56.0, radius: 0.0055, track: 0.015, scale: 1.0, \</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;                                     servos: [{servo: 1, value: 1}, {servo: 2, value: 2}, \</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;                                              {servo: 3, value: 1}, {servo: 4, value: 2}]}&quot;</div></div><!-- fragment --> 
<p>Definition at line <a class="el" href="i2cpwm__controller_8cpp_source.html#l01327">1327</a> of file <a class="el" href="i2cpwm__controller_8cpp_source.html">i2cpwm_controller.cpp</a>.</p>

</div>
</div>
<a class="anchor" id="ga4583b417d172bde68e75db603da3362e"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool stop_servos </td>
          <td>(</td>
          <td class="paramtype">std_srvs::Empty::Request &amp;&#160;</td>
          <td class="paramname"><em>req</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std_srvs::Empty::Response &amp;&#160;</td>
          <td class="paramname"><em>res</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p><code>#include &lt;<a class="el" href="i2cpwm__controller_8cpp.html">src/i2cpwm_controller.cpp</a>&gt;</code></p>

<p>service to stop all servos on all boards </p>
<p>A service to stop all of the servos on all of the PWM boards and set their power state to off / coast.</p>
<p>This is different from setting each servo to its center value. A centered servo is still under power and it's in a brake state.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">req</td><td>is empty </td></tr>
    <tr><td class="paramname">res</td><td>is empty </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>true</dd></dl>
<p><b>Example</b> </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;# stop all servos on all boards and setting them to coast rather than brake</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;</div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;rosservice call /stop_servos</div></div><!-- fragment --> 
<p>Definition at line <a class="el" href="i2cpwm__controller_8cpp_source.html#l01370">1370</a> of file <a class="el" href="i2cpwm__controller_8cpp_source.html">i2cpwm_controller.cpp</a>.</p>

</div>
</div>
</div><!-- contents -->
<!-- HTML footer for doxygen 1.8.11-->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.11
</small></address>
</body>
</html>
